import { Field, Form, Formik } from 'formik' import { trpc, client, inferMutationInput } from '~/utils/trpc' import IVInputField from '~/components/IVInputField' import IVButton from '~/components/IVButton' import PageHeading from '~/components/PageHeading' import { isOrgSlugValid } from '~/utils/validate' export default function NewOrganizationPage() { return (
) } function NewOrganizationForm() { const createOrganization = trpc.useMutation('organization.create') return ( > initialValues={{ slug: '', name: '', }} isInitialValid={false} initialTouched={{}} onSubmit={async data => { if (createOrganization.isLoading) return createOrganization.mutate(data, { onSuccess(newOrg) { window.location.assign( `/dashboard/${ newOrg.slug }?nc-new-organization=${encodeURIComponent(newOrg.name)}` ) }, }) }} > {({ errors, touched, isValid }) => (
{ if (!slug) return 'Please enter a name.' }} required />
{ if (!isOrgSlugValid(slug)) { return 'Slugs must be at least 2 characters and can only contain lowercase letters, numbers, hyphens, and underscores.' } const canChange = await client.query( 'organization.is-slug-available', { slug, } ) if (!canChange) { return 'Sorry, this slug is taken. Please select another.' } }} required />
{createOrganization.isError && (
Sorry, there was a problem creating the organization.
)}
)} ) }